<?php

class ClienteService {

    private $clienteDAO;

    public function __construct() {
        $this->clienteDAO = new ClienteDAO();
    }

    public function salvar($cliente) {
        
        $conexao = Conexao::getConexao();
        $conexao->beginTransaction();
        
        try {

            $cliente->setSenha(Seguranca::criptografaSenha($cliente->getSenha()));

            if($cliente->getUsuarioID() <= 0){

                if($this->exitePorEmail($cliente->getEmail()))
                    throw new Exception("Erro, ja existe um Usuario com esse Email!!!");
                if($this->exitePorLogin($cliente->getLogin()))
                    throw new Exception("Erro, ja existe um Usuario com esse Login!!!");
                if($this->exitePorCpf($cliente->getPessoa()->getCpf()))
                    throw new Exception("Erro, ja existe um Usuario com esse CPF!!!");
                if(!Util::validaCPF($cliente->getPessoa()->getCpf()))
                    throw new Exception("Erro, CPF Inválido!!!");

            }
            
            $cliente = $this->clienteDAO->salvar($cliente);
            
            if(!strpos($cliente->getMedia()->getCaminho(), Constantes::$IMG_CLI_DEFAULT)){
                Util::geraThumb($cliente->getMedia()->getCaminho(), Constantes::$TAM_THUMB_IMG);
            }
            
            $conexao->commit();
            return $cliente;

        } catch (Exception $err) {
            $conexao->rollBack();
            throw new Exception($err->getMessage());
        }
    }

    public function excluir($usuarioID) {

        try {
            if (!isset($usuarioID) || $usuarioID <= 0)
                throw new Exception("Codigo do Usuario Nao Econtrado!!!");

            $this->clienteDAO->excluir($usuarioID);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function listar($pagina = 0, $email = "", $login = "", $statusID = -1, $carregarDependencias = false) {
        try {
            return $this->clienteDAO->listar($pagina, $email, $login, $statusID, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function listarPorOrdem($pagina = 0, $tamanho = 0, $ordem = "usuarioID", $direcao = "DESC", $carregarDependencias = false) {
        try {
            return $this->clienteDAO->listarPorOrdem($pagina, $tamanho, $ordem, $direcao, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function buscarPorID($usuarioID, $carregarDependencias = false) {
        try {
            if (!isset($usuarioID) || $usuarioID <= 0)
                throw new Exception("Codigo do Usuario Nao Econtrado!!!");
            return $this->clienteDAO->buscarPorID($usuarioID, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function total($email = "", $login = "", $statusID = -1) {
        try {
            return $this->clienteDAO->total($email, $login, $statusID);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function exitePorCpf($cpf){
        $pessoaService = new PessoaService();        
        return $pessoaService->exitePorCpf($cpf);
    }

    public function exitePorEmail($email){
        if($this->total($email) > 0) return true;
        return false;
    }

    public function exitePorLogin($login){
        if($this->total("",$login) > 0) return true;
        return false;
    }

}
?>